package com.everyline.lib_base.utils

import android.text.Editable
import android.text.InputType
import android.text.TextWatcher
import android.text.method.DigitsKeyListener
import android.widget.EditText

/**
 * 描述   ：金额输入字体监听类，限制小数点后输入位数
 *
 *
 * 默认限制小数点2位
 * 默认第一位输入小数点时，转换为0.
 * 如果起始位置为0,且第二位跟的不是".",则无法后续输入
 */
open class MoneyTextWatcher(private val editText: EditText) : TextWatcher {
    private var digits = 2
    fun setDigits(d: Int): MoneyTextWatcher {
        digits = d
        return this
    }

    override fun beforeTextChanged(s: CharSequence, start: Int, count: Int, after: Int) {}
    override fun onTextChanged(s: CharSequence, start: Int, before: Int, count: Int) {
        //删除“.”后面超过2位后的数据
        var s = s
        if (s.toString().contains(".")) {
            editText.inputType = InputType.TYPE_CLASS_NUMBER
            editText.setSelection(s.length) //光标移到最后
            if (s.length - 1 - s.toString().indexOf(".") > digits) {
                s = s.toString().subSequence(0,
                    s.toString().indexOf(".") + digits + 1)
                editText.setText(s)
                editText.setSelection(s.length) //光标移到最后
            }
        } else {
            editText.keyListener = DigitsKeyListener.getInstance("0123456789.")
            editText.setSelection(s.length) //光标移到最后
        }
        //如果"."在起始位置,则起始位置自动补0
        if (s.toString().trim { it <= ' ' }.substring(0) == ".") {
            s = "0$s"
            editText.setText(s)
            editText.setSelection(2)
            editText.setSelection(s.length) //光标移到最后
        }

        //如果起始位置为0,且第二位跟的不是".",则无法后续输入
        if (s.toString().startsWith("0")
            && s.toString().trim { it <= ' ' }.length > 1
        ) {
            if (s.toString().substring(1, 2) != ".") {
                editText.setText(s.subSequence(0, 1))
                editText.setSelection(s.length - 1) //光标移到最后
                return
            }
        }
        //最大99999.99
//        if (s.length() > 2 && Double.parseDouble(s.toString()) > 99999.99) {
//            editText.setText(s.subSequence(0, 5));
//            editText.setSelection(5); //光标移到最后
//            if (s.length() > 5) {
//                editText.setSelection(5); //光标移到最后
//            }
//
//            return;
//        }
    }

    override fun afterTextChanged(s: Editable) {}
}